package com.xxxy.ljh.myapplication.activity.detail;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.xxxy.ljh.myapplication.Manager.UserManager;
import com.xxxy.ljh.myapplication.Dao.MemberApplicationDao;
import com.xxxy.ljh.myapplication.DaoImpl.MemberApplicationDaoImpl;
import com.xxxy.ljh.myapplication.R;
import com.xxxy.ljh.myapplication.Dao.ClubDao;
import com.xxxy.ljh.myapplication.DaoImpl.ClubDaoImpl;
import com.xxxy.ljh.myapplication.model.Club;
import com.xxxy.ljh.myapplication.model.User;
import com.xxxy.ljh.myapplication.model.MemberApplication;

import java.util.List;

/**
 * 社团详情页面
 * 显示指定社团的基本信息，并提供加入社团的功能入口。
 */
public class ClubDetailActivity extends AppCompatActivity {
    private TextView tvClubName;
    private TextView tvClubDescription;
    private TextView tvClubFounder;
    private TextView tvClubMemberCount;
    private TextView tvClubCreateTime;
    private Button btnJoinClub;

    private ClubDao clubDao;
    private Club currentClub;

    /**
     * Activity 创建时调用的方法。
     * 初始化视图组件、加载社团数据并设置点击监听器。
     *
     * @param savedInstanceState 保存的实例状态 Bundle 对象
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_club_detail);

        initViews();
        clubDao = new ClubDaoImpl(this);

        // 获取传递的社团ID
        int clubId = getIntent().getIntExtra("association_id", -1);
        if (clubId != -1) {
            loadClubDetails(clubId);
        } else {
            Toast.makeText(this, "无效的社团信息", Toast.LENGTH_SHORT).show();
            finish();
        }

        setupClickListeners();
    }

    /**
     * 初始化布局中的各个控件引用。
     */
    private void initViews() {
        tvClubName = findViewById(R.id.tvClubName);
        tvClubDescription = findViewById(R.id.tvClubDescription);
        tvClubFounder = findViewById(R.id.tvClubFounder);
        tvClubMemberCount = findViewById(R.id.tvClubMemberCount);
        tvClubCreateTime = findViewById(R.id.tvClubCreateTime);
        btnJoinClub = findViewById(R.id.btnJoinClub);
    }

    /**
     * 根据社团 ID 加载社团详细信息。
     *
     * @param clubId 要查询的社团 ID
     */
    private void loadClubDetails(int clubId) {
        currentClub = clubDao.getClubById(clubId);
        if (currentClub != null) {
            displayClubDetails(currentClub);
            // 检查用户是否已经申请或加入了该社团
            checkUserApplicationStatus();
        } else {
            Toast.makeText(this, "未找到社团信息", Toast.LENGTH_SHORT).show();
            finish();
        }
    }

    /**
     * 将传入的社团对象数据显示到界面上。
     *
     * @param club 包含社团信息的对象
     */
    private void displayClubDetails(Club club) {
        tvClubName.setText(club.getName());
        tvClubDescription.setText(club.getDescription());

        // 安全地显示创建者姓名
        String founderName = club.getFounderName();
        if (founderName != null && !founderName.isEmpty()) {
            tvClubFounder.setText("创建者: " + founderName);
        } else {
            tvClubFounder.setText("创建者: 未知");
        }

        tvClubMemberCount.setText("成员数: " + club.getMemberCount());

        // 安全地显示创建时间
        String createTime = club.getCreateTime();
        if (createTime != null && !createTime.isEmpty()) {
            tvClubCreateTime.setText("创建时间: " + club.getFormattedCreateTime());
        } else {
            tvClubCreateTime.setText("创建时间: 未知");
        }
    }

    /**
     * 检查用户对该社团的申请状态并更新界面
     */
    private void checkUserApplicationStatus() {
        if (!isUserLoggedIn()) {
            return;
        }

        SharedPreferences prefs = getSharedPreferences("user_prefs", MODE_PRIVATE);
        int userId = prefs.getInt("user_id", -1);

        if (userId != -1) {
            MemberApplicationDao applicationDao = new MemberApplicationDaoImpl(this);
            List<MemberApplication> applications = applicationDao.getApplicationsByUserId(userId);
            
            // 查找针对当前社团的申请
            for (MemberApplication application : applications) {
                if (application.getAssociationId() == currentClub.getId()) {
                    switch (application.getStatus()) {
                        case 0: // 待审核
                            btnJoinClub.setText("申请审核中");
                            btnJoinClub.setEnabled(false);
                            break;
                        case 1: // 已通过
                            btnJoinClub.setText("已是社团成员");
                            btnJoinClub.setEnabled(false);
                            break;
                        case 2: // 已拒绝
                            btnJoinClub.setText("申请被拒绝，重新申请");
                            // 保持按钮可用
                            break;
                    }
                    return;
                }
            }
        }
    }

    /**
     * 设置按钮等交互组件的点击事件监听器。
     */
    private void setupClickListeners() {
        btnJoinClub.setOnClickListener(v -> {
            if (isUserLoggedIn()) {
                joinClub();
            } else {
                Toast.makeText(this, "请先登录", Toast.LENGTH_SHORT).show();
                // 可以跳转到登录页面
            }
        });
    }

    /**
     * 判断用户是否已登录。
     *
     * @return true 表示用户已登录；false 表示未登录
     */
    private boolean isUserLoggedIn() {
        SharedPreferences prefs = getSharedPreferences("user_prefs", MODE_PRIVATE);
        return prefs.getBoolean("is_logged_in", false);
    }

    /**
     * 处理用户申请加入社团的操作。
     * 若用户已登录且社团存在，则提交会员申请。
     */
    private void joinClub() {
        if (currentClub != null) {
            SharedPreferences prefs = getSharedPreferences("user_prefs", MODE_PRIVATE);
            int userId = prefs.getInt("user_id", -1);

            if (userId != -1) {
                // 检查是否已经申请过
                MemberApplicationDao applicationDao = new MemberApplicationDaoImpl(this);
                
                // 提交申请而不是直接加入
                MemberApplication application = new MemberApplication();
                application.setAssociationId(currentClub.getId());
                application.setUserId(userId);

                if (applicationDao.submitApplication(application)) {
                    Toast.makeText(this, "申请已提交，等待社长审核！", Toast.LENGTH_LONG).show();
                    btnJoinClub.setText("申请审核中");
                    btnJoinClub.setEnabled(false);
                } else {
                    Toast.makeText(this, "申请提交失败", Toast.LENGTH_SHORT).show();
                }
            } else {
                Toast.makeText(this, "用户信息异常", Toast.LENGTH_SHORT).show();
            }
        }
    }

    /**
     * 检查当前用户是否有资格加入社团。
     * 例如：不能是黑名单用户等。
     *
     * @return true 表示有资格加入；false 表示无资格或未登录
     */
    private boolean checkUserEligibility() {
        UserManager userManager = UserManager.getInstance(this);
        User currentUser = userManager.getCurrentUser();

        if (currentUser == null) {
            return false;
        }
        // 检查用户是否有加入社团的权限（例如不是黑名单用户）
        // 这里可以添加更多业务逻辑检查
        return true;
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        // 每次恢复活动时重新检查申请状态
        if (currentClub != null) {
            checkUserApplicationStatus();
        }
    }
}